package br.com.cicero.notasfiscais.mb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.component.html.HtmlDataTable;
import javax.inject.Inject;

import org.primefaces.component.datatable.DataTable;

import br.com.cicero.notasfiscais.annotation.EmailFinanceiro;
import br.com.cicero.notasfiscais.dao.DAO;
import br.com.cicero.notasfiscais.modelo.Item;
import br.com.cicero.notasfiscais.modelo.NotaFiscal;
import br.com.cicero.notasfiscais.modelo.Produto;
import br.com.cicero.notasfiscais.stereotypes.ViewBean;

@ViewBean
public class NotaFiscalBean implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private NotaFiscal notaFiscal = new NotaFiscal();
	private Item item = new Item();
	private HtmlDataTable tabela;
	private List<NotaFiscal> notas = new ArrayList<NotaFiscal>();
	private Long idProduto;
	private DataTable tabelaNotas;
		
	@Inject @EmailFinanceiro
	private String email;
	
	@Inject
	private DAO<NotaFiscal> dao;
	
	@Inject
	private DAO<Produto> produtoDao;
					
	public void gravar() {
		dao.adiciona(notaFiscal);
		this.notaFiscal = new NotaFiscal();
		System.out.println("Notifica " + email + ": nova NotaFiscal cadastrada.");
	}
	
	public void guardaItem() {
		
		item.setValorUnitario(item.getProduto().getPreco());
		
		notaFiscal.getItens().add(item);
		item.setNotaFiscal(notaFiscal);
		
		item = new Item();
	}
	
	public void removeItem() {
		Item item = (Item) tabela.getRowData();
		notaFiscal.getItens().remove(item);
	}
	
	public void remove(NotaFiscal nota) {
		dao.remove(nota);
		notas = dao.listaTodos();
	}
	
	public List<NotaFiscal> getNotas() {
		if (notas.isEmpty() || notas == null) {
			notas = dao.listaTodos();
		}
		return notas;
	}
		
	public NotaFiscal getNotaFiscal() {
		return notaFiscal;
	}

	public Item getItem() {
		return item;
	}

	public void setItem(Item item) {
		this.item = item;
	}
	
	public void setNotaFiscal(NotaFiscal notaFiscal) {
		this.notaFiscal = notaFiscal;
	}

	public HtmlDataTable getTabela() {
		return tabela;
	}

	public void setTabela(HtmlDataTable tabela) {
		this.tabela = tabela;
	}
	
	public Long getIdProduto() {
		return idProduto;
	}
	
	public void setIdProduto(Long idProduto) {
		this.idProduto = idProduto;
	}
	
	public DataTable getTabelaNotas() {
		return tabelaNotas;
	}
	
	public void setTabelaNotas(DataTable tabelaNotas) {
		this.tabelaNotas = tabelaNotas;
	}
			
}
